/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package broad.dao;

/**
 *
 * @author Rafael
 */
import broad.bean.Usuario;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class DAOUsuario extends DAOGenerics<Usuario, Integer> {

    public Usuario buscar(Integer obj) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {

            String sql = "from Usuario where idPessoa = :id";

            Query qr = s.createQuery(sql);
            qr.setParameter("id", obj);

            Usuario usu = (Usuario) qr.uniqueResult();
            //Hibernate.initialize(usu.getGrupos());

            return usu;
        } finally {
            s.close();
        }

    }


    /*Busca um usuario pelo login
     *@param login
     */
    public Usuario buscarPorLogin(String login) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();
        s.beginTransaction();

        Usuario usuario = null;
        try {

            String hql = "from Usuario u where u.login like :busca";
            Query qr = s.createQuery(hql);
            qr.setParameter("busca", login);
            usuario = (Usuario) qr.uniqueResult();
            Hibernate.initialize(usuario.getIdPessoa());
            //Hibernate.initialize(usuario.getGrupos());

            return usuario;

        } finally {
            s.getTransaction().commit();
            s.close();
        }

    }

    public List<Usuario> buscarTodos() {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            return buscarTodos(s);

        } finally {
            s.close();
        }
    }

    public List<Usuario> buscarTodos(Session s) {

        String sql = "from Usuario u left join fetch u.pessoa";

        Query qr = s.createQuery(sql);

        return (List<Usuario>) qr.list();
    }

    public boolean eUsuario(Integer obj) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();
        try {
            String sql = "from Usuario where idPessoa = :id";

            Query qr = s.createQuery(sql);
            qr.setParameter("id", obj);

            if (qr.list().isEmpty()) {

                return false;
            } else {
                return true;
            }
        } finally {
            s.close();
        }
    }

    public boolean conferirLogin(String login, String senha) {

        SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory();
        Session s = sf.openSession();

        try {
            String sql = "from Usuario where login = :loginn and senha = :pass";
            Query qr = s.createQuery(sql);
            qr.setParameter("loginn", login);
            qr.setParameter("pass", senha);

            if (qr.list().isEmpty()) {

                return false;
            } else {
                return true;
            }
        } finally {
            s.close();
        }

    }

    @Override
    public Usuario buscar(Integer obj, Session s) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
